......之间有什么不同吗
if ($value) { }
...和...
if ($value): endif;
?
它们是相同的,但如果你的代码中有MVC并且不想在你的代码中有很多回声,那么第二个是很好的.例如,在我的.phtml
文件(Zend Framework)中,我将编写如下内容:
value): ?> Hello asd): ?> Your name is: = $this->name ?> You don't have a name.
我个人真的很讨厌替代语法.大括号的一个好处是大多数IDE,vim等都有支架突出显示.在我的文本编辑器中,我可以双击一个大括号,它将突出显示整个块,这样我就可以看到它的结束位置并且很容易开始.
我不知道哪个编辑器可以突出endif,endforeach等.
我想这就说明了一切:
这种替代语法非常适合在混合使用它们的情况下提高易读性(适用于PHP和HTML!).
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
当混合HTML和PHP时,替代sytnax更容易阅读.在普通的PHP文档中,应该使用传统的语法.
在我们公司,处理HTML的首选方法是:
if($condition) { ?> HTML content here } else { ?> Other HTML content here } ?>
最后,它确实是一个选择并坚持下去的问题.
它们在功能上确实是相同的.
但是,如果endif
距离记者太远,if
我认为给它做一个引用评论是更好的做法.这样你就可以轻松找到它的开放位置.无论用什么语言:
if (my_horn_is_red or her_umbrella_is_yellow) { // ... // let's pretend this is a lot of code in the middle foreach (day in week) { sing(a_different_song[day]); } // ... } //if my_horn_is_red
这实际上适用于任何类似的"关闭事物"!;)
此外,一般来说,编辑更好地处理大括号,从某种意义上说,它们可以指向它打开的位置.但即便如此,也不会使描述性评论变得不那么有效.
您可以在官方文档中找到它:PHP:控制结构的替代语法
我认为当你在视图脚本中混合使用if
s,for
s和foreach
es 时,它会更加清晰:
hasIterable ): ?>Iterable
Foo = Bar
Spam
Eggs
而不是:
hasIterable ){ ?>Iterable
Foo = Bar
Spam
Eggs
这对于长控制语句尤其有用,在这些语句中,您可能无法从底部括号中看到顶部声明.
我认为这取决于你的个人编码风格.如果您习惯使用C++,Javascript等,使用{}语法可能会感觉更舒服.如果您习惯使用Visual Basic,则可能需要使用if:endif; 句法.
我不确定一个人可以明确地说一个人比另一个人更容易阅读 - 这是个人偏好.我通常做这样的事情:
Foo!
Bar!
这是否更容易阅读:
Foo!
Bar!
是一个意见问题.我可以看到为什么有些人会觉得第二种方式更容易 - 但前提是你一直没有使用Javascript和C++进行编程.:)
如果可能的话,我会使用第一个选项,无论新选项如何.语法是标准的,每个人都知道.它也向后兼容.
两者都是一样的.
但是:如果你想在视图文件(MVC的V)中使用PHP作为模板语言,你可以使用这种替代语法来区分为实现业务逻辑而编写的php代码(MVC的控制器和模型部分)和gui逻辑.当然它不是强制性的,你可以使用你喜欢的语法.
ZF使用这种方法.
两种语法之间没有技术差异.替代语法不是新的; 它至少可以支持PHP 4,甚至可能更早.
您可能更喜欢替代形式,因为它明确说明哪个控制结构正在结束:endwhile
例如,只能终止一个while
块,而如果遇到一个大括号,它可能会关闭任何东西.
但是,您可能更喜欢传统的语法,如果您使用的编辑器对其他类C语法中的大括号有特殊支持.例如,Vim支持几个键击,用于导航到匹配的大括号以及大括号分隔的块的开头和结尾.替代语法会破坏该编辑器功能.